package circuqueue;

import java.util.Arrays;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User:周次煜
 * Date: 2024-04-02
 * Time：20:42
 */
//public class CirQueue {
//   private int [] elem;
//   private int head;
//
//   private int last;
//
//   private int useSize;
//
//    public CirQueue() {
//        this.elem = new int[4];
//    }
//
//    public void offer(int val) {
//        if (isFull()) {
//            return;
////            this.elem= Arrays.copyOf(elem,2*elem.length);
//        }
//
//
//        elem[last]=val;
//        last=(last+1)%elem.length;
//        useSize++;
//
//    }
//
//    public int remove() {
//        if (isEmpty()) {
//            return -1;
//        }
//
//
//        int ret=elem[head];
//        head=(head+1)%elem.length;
//        useSize--;
//        return ret;
//    }
//
//    public  int peek() {
//        if (isEmpty()) {
//            return -1;
//        }
//
//        return elem[head];
//    }
//
//    public boolean isFull() {
//        int tmp=(last+1) % elem.length ;
//        return  tmp==head;
//    }
//
//    public boolean isEmpty() {
//        return head==last;
//    }
//
//    public int size() {
//        return useSize;
//    }
//
//}


class MyCircularQueue {

    int []elem;
    int head;
    int last;

    public MyCircularQueue(int k) {
        elem=new int [k+1];
    }

    public boolean enQueue(int value) {
        if(isFull()) {
            return false;
        }
        elem[last]=value;
        last=(last+1)%elem.length;
        return true;
    }

    public boolean deQueue() {

        if(isEmpty()) {
            return false;
        }

        head = (head+1) % elem.length;

        return true;
    }

    public int Front() {

        if(isEmpty()) return -1;

        return elem[head];

    }

    public int Rear() {
        if(isEmpty()) return -1;
        int index = last > 0 ?    last-1 : elem.length - 1;
        return elem[index];
    }

    public boolean isEmpty() {
        return head==last;
    }

    public boolean isFull() {
        int tmp=(last+1)%elem.length;
        return tmp==head;
    }

    public static void main(String[] args) {
        MyCircularQueue myc=new MyCircularQueue(3);
        System.out.println(myc.enQueue(1));
        System.out.println(myc.enQueue(2));
        System.out.println(myc.enQueue(3));
        System.out.println(myc.enQueue(4));
        System.out.println(myc.Rear());
        System.out.println(myc.isFull());
        System.out.println(myc.deQueue());
        System.out.println(myc.enQueue(4));
        System.out.println(myc.Rear());
    }
}